const { app, BrowserWindow, Menu, shell, ipcMain } = require('electron')
const path = require('path')

// 加载环境变量
require('dotenv').config()

// 抑制弃用警告
process.noDeprecation = true
process.env.NODE_NO_WARNINGS = '1'

// // 强制设置环境变量（如果未设置）
// if (!process.env.NODE_ENV) {
//   // 根据应用是否打包来判断环境
//   if (app.isPackaged) {
//     process.env.NODE_ENV = 'production'
//   } else {
//     process.env.NODE_ENV = 'development'
//   }
// }

// 判断是否为开发环境
const isDev = !app.isPackaged && process.env.NODE_ENV !== 'production'

// 添加调试信息
console.log('=== 环境信息 ===')
console.log('app.isPackaged:', app.isPackaged)
console.log('NODE_ENV (原始):', process.env.NODE_ENV)
console.log('NODE_ENV (设置后):', process.env.NODE_ENV)
console.log('isDev:', isDev)
console.log('process.argv:', process.argv)
console.log('================')

// 保持对窗口对象的全局引用，如果不这么做的话，当JavaScript对象被
// 垃圾回收的时候，窗口会被自动地关闭
let mainWindow

function createWindow() {
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    minWidth: 800,
    minHeight: 600,
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
      enableRemoteModule: false,
      preload: path.join(__dirname, 'preload.js'),
      // 禁用一些可能导致警告的功能
      enableWebSQL: false,
      spellcheck: false,
      // 安全设置
      webSecurity: true,
      allowRunningInsecureContent: false
    },
    icon: path.join(__dirname, 'assets/icon.png'),
    show: false,
    titleBarStyle: 'default',
    frame: true
  })

  // 当窗口准备好显示时显示窗口
  mainWindow.once('ready-to-show', () => {
    mainWindow.show()
    
    // 设置安全的内容安全策略
    mainWindow.webContents.session.webRequest.onHeadersReceived((details, callback) => {
      callback({
        responseHeaders: {
          ...details.responseHeaders,
          'Content-Security-Policy': [
            isDev 
              ? "default-src 'self' 'unsafe-inline' 'unsafe-eval' http://localhost:3000 ws://localhost:3000;"
              : "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';"
          ]
        }
      })
    })
    
    // 开发环境下打开开发者工具
    if (isDev) {
      mainWindow.webContents.openDevTools()
      
      // 禁用不必要的DevTools功能以减少警告
      mainWindow.webContents.on('devtools-opened', () => {
        // 可以在这里添加DevTools打开后的配置
      })
    }
  })

  // 加载应用
  if (isDev) {
    // 开发环境：加载Vite开发服务器
    mainWindow.loadURL('http://localhost:3000')
  } else {
    // 生产环境：加载构建后的文件
    mainWindow.loadFile(path.join(__dirname, '../dist/index.html'))
  }

  // 当窗口被关闭时发出
  mainWindow.on('closed', () => {
    // 取消引用 window 对象，如果你的应用支持多窗口的话，
    // 通常会把多个 window 对象存放在一个数组里面，
    // 与此同时，你应该删除相应的元素。
    mainWindow = null
  })

  // 处理外部链接
  mainWindow.webContents.setWindowOpenHandler(({ url }) => {
    shell.openExternal(url)
    return { action: 'deny' }
  })
}

// 当Electron完成初始化并准备创建浏览器窗口时调用此方法
app.whenReady().then(() => {
  createWindow()
  
  // 在macOS上，当所有窗口都关闭时，通常会重新创建一个窗口
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
})

// 当所有窗口都关闭时退出应用
app.on('window-all-closed', () => {
  // 在macOS上，除非用户用Cmd + Q确定地退出，
  // 否则绝大部分应用及其菜单栏会保持激活。
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

// 创建应用菜单
function createMenu() {
  const template = [
    {
      label: '文件',
      submenu: [
        {
          label: '新建',
          accelerator: 'CmdOrCtrl+N',
          click: () => {
            // 处理新建操作
          }
        },
        { type: 'separator' },
        {
          label: '退出',
          accelerator: process.platform === 'darwin' ? 'Cmd+Q' : 'Ctrl+Q',
          click: () => {
            app.quit()
          }
        }
      ]
    },
    {
      label: '编辑',
      submenu: [
        { role: 'undo', label: '撤销' },
        { role: 'redo', label: '重做' },
        { type: 'separator' },
        { role: 'cut', label: '剪切' },
        { role: 'copy', label: '复制' },
        { role: 'paste', label: '粘贴' }
      ]
    },
    {
      label: '视图',
      submenu: [
        { role: 'reload', label: '重新加载' },
        { role: 'forceReload', label: '强制重新加载' },
        { role: 'toggleDevTools', label: '切换开发者工具' },
        { type: 'separator' },
        { role: 'resetZoom', label: '实际大小' },
        { role: 'zoomIn', label: '放大' },
        { role: 'zoomOut', label: '缩小' },
        { type: 'separator' },
        { role: 'togglefullscreen', label: '切换全屏' }
      ]
    },
    {
      label: '帮助',
      submenu: [
        {
          label: '关于',
          click: () => {
            // 显示关于对话框
          }
        }
      ]
    }
  ]

  const menu = Menu.buildFromTemplate(template)
  Menu.setApplicationMenu(menu)
}

// 创建菜单
createMenu()

// IPC通信示例
ipcMain.handle('get-app-version', () => {
  return app.getVersion()
})

ipcMain.handle('get-app-name', () => {
  return app.getName()
})

// 窗口操作
ipcMain.handle('window-minimize', () => {
  if (mainWindow) {
    mainWindow.minimize()
    return true
  }
  return false
})

ipcMain.handle('window-maximize', () => {
  if (mainWindow) {
    if (mainWindow.isMaximized()) {
      mainWindow.unmaximize()
    } else {
      mainWindow.maximize()
    }
    return true
  }
  return false
})

ipcMain.handle('window-close', () => {
  if (mainWindow) {
    mainWindow.close()
    return true
  }
  return false
})

// 系统通知
ipcMain.handle('show-notification', (event, title, body) => {
  const { Notification } = require('electron')
  if (Notification.isSupported()) {
    const notification = new Notification({
      title: title,
      body: body,
      icon: path.join(__dirname, 'assets/icon.png')
    })
    notification.show()
    return true
  }
  return false
})

// 安全设置
app.on('web-contents-created', (event, contents) => {
  // 禁用新窗口创建
  contents.on('new-window', (event, navigationUrl) => {
    event.preventDefault()
    shell.openExternal(navigationUrl)
  })
  
  // 禁用导航到外部URL
  contents.on('will-navigate', (event, navigationUrl) => {
    const parsedUrl = new URL(navigationUrl)
    
    if (parsedUrl.origin !== 'http://localhost:3000' && !isDev) {
      event.preventDefault()
    }
  })
  
  // 禁用表单提交到外部URL
  contents.on('will-navigate', (event, navigationUrl) => {
    const parsedUrl = new URL(navigationUrl)
    if (parsedUrl.origin !== 'http://localhost:3000' && !isDev) {
      event.preventDefault()
    }
  })
  
  // 禁用下载到不安全的位置
  contents.on('will-download', (event, item, webContents) => {
    // 可以在这里添加下载安全检查
  })
})

// 设置应用安全策略
app.on('ready', () => {
  // 禁用远程内容
  if (!isDev) {
    app.on('web-contents-created', (event, contents) => {
      contents.on('new-window', (event, navigationUrl) => {
        event.preventDefault()
      })
    })
  }
})
